//
//  LGDCCellContent.h
//  ALS3.0
//
//  Created by guomianxiang on 2017/4/7.
//  Copyright © 2017年 guomianxiang. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "LGController.h"
#import "LGDoor.h"
#import "LGSketchCell.h"
#import "LGInputAccessoryView.h"
/**
 用于设置LGShowCell中titleLab的alignment方式

 - LGDCCellTitleAlignmentLeft: 左对齐
 - LGDCCellTitleAlignmentRight: 右对齐
 */
typedef NS_OPTIONS(NSUInteger, LGDCCellTitleAlingment) {
    LGDCCellTitleAlignmentLeft = 0,
    LGDCCellTitleAlignmentRight = 1,
};

@interface LGDCCellContent : NSObject

/**
 cell的类型
 */
@property (assign, nonatomic) Class cellClass;

/**
 用于设置cell的图片
 */
@property (strong, nonatomic) UIImage *image;

/**
 用于设置cell的标题
 */
@property (strong, nonatomic) NSString *title;

/**
 用于设置cell标题对应的内容
 */
@property (strong, nonatomic) NSString *contentText;
/**
 cell的高度
 */
@property (assign, nonatomic) CGFloat cellHeight;
/**
 记录cell和本模型在数组中的indxpath
 */
@property (strong, nonatomic) NSIndexPath *indexPath;
/**
 LGEditCell中textfield的占位符
 */
@property (strong, nonatomic) NSString *placehold;
///**
// LGEditCell中textfield的inputAccessoryView
// */
//@property (strong, nonatomic) LGInputAccessoryView *inputAccessoryView;
/**
 LGEditCell中textfield的键盘类型
 */
@property (assign, nonatomic)  UIKeyboardType keyBoardType;
/**
 LGEditCell中设置textfield的enable
 */
@property (assign, nonatomic) BOOL textFieldEnable;
/**
 LGShowCell中用于设置提示信息
 */
@property (strong, nonatomic) NSString *presentationText;
/**
 LGShowCell中选择rightAlignmentLab或者leftAlignmentLab
 */
@property (assign, nonatomic) LGDCCellTitleAlingment cellTitleAlignment;
/**
 LGShowCell中设置cell右边的箭头是否显示
 */
@property (assign, nonatomic) BOOL showRightArrow;
/**
 LGShowCell中 设置右边selectBtn是否被选中 即 表示该门是否被展示
 */
@property (assign, nonatomic) BOOL select;

/**
 用于设置LGSketchCell
 */
@property (strong, nonatomic) LGDoor *door;
/**
 用于设置LGSketchCell
 */
@property (strong, nonatomic) LGController *controller;

/**
 用于设置LGSketchCell的状态
 */
@property (assign, nonatomic) LGSketchCellState sketchCellState;
//-------------------------------------------
#pragma mark - init

/**
 快速创建 cellTitleAlignment为LGDCCellTitleAlignmentLeft，并设置showRightArrow的实例

 @param show BOOL设置showRightArrow
 @return 返回实例
 */
- (instancetype)initLeftAlignmentAndshowRightArrow:(BOOL)show;
#pragma mark - seatchController

/**
 将LGController 转换成 LGDCCellContent，用于自动搜索控制器将新搜索的控制器模型转换成viewMoedl

 @param resultController LGController
 @return 返回cellclass为LGSketchCell的LGDCCellContent
 */
+ (LGDCCellContent *)transfromCellContentArrWithSearchResultController:(LGController *)resultController;

#pragma mark - showControllerTVC

/**
 将LGController模型数组 转换成 cellModel数组

 @param controllersArr LGController模型数组，必须符合指定范型NSArray<NSArray<LGController *> *> *
 @return 返回LGDCCellContent动态数组，(NSMutableArray<NSMutableArray<LGDCCellContent *> *> *)
 */
+ (NSMutableArray<NSMutableArray<LGDCCellContent *> *> *)transfromCellContentArrWithControllersArr:(NSArray<NSArray<LGController *> *> *)controllersArr;
#pragma mark - controller info

/**
 将LGController 转换成 展示LGController详细信息的viewmodel数组，且包含cellClass为LGButtonCell的LGDCCellContent

 @param showController 需要被转换的LGController
 @return viewmodel数组(NSMutableArray <NSMutableArray <LGDCCellContent *>*>*)
 */
+ (NSMutableArray <NSMutableArray <LGDCCellContent *>*>*)transfromShowControllerInfoCellContentArrWithController:(LGController *)showController;

/**
 将LGController 转换成 编辑LGController详细信息的viewmodel数组，且包含cellClass为LGButtonCell的LGDCCellContent

 @param editController 需要被转换的LGController
 @return viewmodel数组(NSMutableArray <NSMutableArray <LGDCCellContent *>*>*)
 */
+ (NSMutableArray <NSMutableArray <LGDCCellContent *>*>*)transfromEditControllerInfoCellContentArrWithController:(LGController *)editController;
/**
 将LGController 转换成 添加LGController的viewmodel数组，且包含cellClass为LGButtonCell的LGDCCellContent
 
 @param addController 需要被转换的LGController
 @return viewmodel数组(NSMutableArray <NSMutableArray <LGDCCellContent *>*>*)
 */
+ (NSMutableArray <NSMutableArray <LGDCCellContent *>*>*)transfromAddControllerInfoCellContentArrWithController:(LGController *)addController;

/**
 将viewModel数组 转换成 LGController

 @param cellContentArr 需要转换的viewModel数组
 @return 转换成功的LGController
 */
+ (LGController *)transfromLGControllerItemWithCellContentArr:(NSMutableArray<NSMutableArray<LGDCCellContent *> *> *)cellContentArr;


#pragma mark - showDoorTVC

/**
 将LGDoor数组 转变成 TableView的sectionIndexTitles

 @param orderListData LGDoor数组(NSArray <NSArray <LGDoor *>*>*)
 @return NSString数组
 */
+ (NSArray *)getLetterOrderListSectionDataWith:(NSArray <NSArray <LGDoor *>*>*)orderListData;

/**
 将LGDoor数组 转变成 viewModel数组

 @param letterOrderDoorsArr 需要转换的LGDoor
 @return 返回viewmodel数组(NSArray <NSArray <LGDCCellContent *>*>*)
 */
+ (NSArray<NSArray<LGDCCellContent *> *> *)transfromCellContentArrWithLetterOrderDoorsArr:(NSArray<NSArray<LGDoor *> *> *)letterOrderDoorsArr;

/**
 将LGDoor数组 转变成 viewModel数组 常用和默认的将会展示，不常用的将不会展示

 @param frequencyDoorsArr 需要转换的按照是否常用以及使用频率进行排序的数组
 @return 返回viewmodel数组(NSArray <NSArray <LGDCCellContent *>*>*)
 */
+ (NSArray<NSArray<LGDCCellContent *> *> *)transfromCellContentArrWithFrequencyDoorsArr:(NSArray <LGDoor *>*)frequencyDoorsArr;

/**
 将不常用的LGDoor数组 转变成 viewModel数组

 @param dislikeDoorsArr 待转换的门数组
 @return 返回viewmodel数组(NSArray <NSArray <LGDCCellContent *>*>*)
 */
+ (NSArray<NSArray<LGDCCellContent *> *> *)transfromCellContentArrWithDislikeDoorsArr:(NSArray <LGDoor *>*)dislikeDoorsArr;


#pragma mark - searchDoorTVC

/**
 将LGDoor数组 转变成 viewModel数组

 @param doorsArr 需要转换的LGDoor
 @return 返回viewmodel数组(NSArray <NSArray <LGDCCellContent *>*>*) */
+ (NSArray<NSArray<LGDCCellContent *> *> *)transfromSearchResultCellContentArrWithDoorsArr:(NSArray<NSArray<LGDoor *> *> *)doorsArr;

#pragma mark - door info

/**
 将LGDoor 转换成 显示door详细信息的 viewmodel数组

 @param door 需要转换的LGDoor
 @return 返回viewmodel数组(NSArray <NSArray <LGDCCellContent *>*>*)
 */
+ (NSArray <NSArray <LGDCCellContent *>*>*)transfromCellContentArrWithDoor:(LGDoor *)door;



@end
